#ifndef __LINK_LIST_H__
#define __LINK_LIST_H__

/**
 * 单项链表的学习
 */

// 
#include "Elemnt_data.h"

// 数据关系
typedef struct Node
{
    Elenemt_data data;//存放数据
    struct Node* next; // 指向下一个节点的指针用于存放指针
}Node;

// 单链表的头结点
typedef struct Link_list
{
    Node* head; // 头指针
    Node* tail; //尾指针
    int size;//链表长度
     struct Node* next; // 指向下一个节点的指针用于存放指针
}Link_list;


// 单链表的创建
Link_list* init_link_list(void);

// 单链表的插入
void insert_tail_node(Link_list* list, Elenemt_data data);
void insert_node(Link_list* list, Elenemt_data data, int index);

// 单链表的删除
void delete_tail_node(Link_list* list);
void delete_node(Link_list* list, int index);

// 单链表的查找
Node* find_node_id(Link_list* list, int index);
Node* find_node_name(Link_list* list, char* name);

// 单链表的遍历
void print_link_list(Link_list* list);

// 单链表的判空
int IsEmpty_Sql_List(Link_list* list);

// 单链表的清空
void clear_link_list(Link_list* list);

// 单链表的合并
Link_list* merge_link_lists(Link_list* list1, Link_list* list2);

// 单链表的销毁
void free_link_list(Link_list ** list);






#endif

